package com.zjm.servlet.servlet06_http;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author ZJM
 * @date 2024/4/13 23:52
 * HttpServletRequest类作用
 * 请求
 */
public class RequestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取请求参数：getParameter()、getParameterValues()等方法用于获取请求中包含的参数值，比如表单提交的数据或URL中的查询参数。
        System.out.println("获取请求参数:" + req.getParameter("username"));
        // 获取请求头信息：getHeader()方法用于获取特定请求头的值，比如User-Agent、Accept-Language等。
        System.out.println("获取请求头信息:" + req.getHeader("User-Agent"));
        // 获取请求属性：getAttribute()和setAttribute()方法用于在请求中设置和获取属性值，这些属性值可以在整个请求处理过程中传递给其他组件。
        req.setAttribute("zjm","9999");
        System.out.println(req.getAttribute("zjm"));
        // 获取请求URL和URI：getRequestURL()和getRequestURI()方法分别返回完整的请求URL和相对于Servlet容器的URI。
        System.out.println("获取请求URL:" + req.getRequestURL());
        System.out.println("获取请求URI:" + req.getRequestURI());
        // 获取请求方法：getMethod()方法返回HTTP请求的方法，比如GET、POST等。
        System.out.println("获取请求方法:"+req.getMethod());
        // 获取会话信息：getSession()方法用于获取与当前请求相关联的会话对象，从而实现会话管理和跟踪用户状态。
        //
        // 获取客户端信息：getRemoteAddr()和getRemoteHost()方法分别返回客户端的IP地址和主机名。
        System.out.println("获取客户端信息IP地址:" + req.getRemoteAddr());
        System.out.println("获取客户端信息主机名:" + req.getRemoteHost());
        // 获取请求体数据：getInputStream()和getReader()方法用于获取请求体数据流，通常用于处理POST请求的请求体数据。
        //
        // 处理文件上传：getPart()和getParts()方法用于获取上传的文件和文件部件。
        //
        // 处理Cookie：getCookies()方法用于获取客户端发送的Cookie。
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理post请求中文乱码
        req.setCharacterEncoding("UTF-8");
        String username = req.getParameter("username"); //接收前端表单的数据
        System.out.println(username);
    }
}
